package com.hcc.repository.gen.config;

import com.hcc.repository.gen.constants.GenerateTypeConstants;
import com.hcc.repository.gen.constants.TemplateEngineType;
import com.hcc.repository.gen.constants.TemplatePathConstants;
import com.hcc.repository.gen.engine.TemplateEngine;
import com.hcc.repository.gen.engine.TemplateEngineFactory;
import com.hcc.repository.gen.generator.GeneratorFactory;
import lombok.Data;

/**
 * TemplateConfig
 *
 * @author hushengjun
 * @date 2023/9/28
 */
@Data
public class TemplateConfig {

    private TemplateEngineType templateEngineType = TemplateEngineType.FREEMARKER;

    public TemplateConfig() {
        this.setTemplateEngineType(TemplateEngineType.FREEMARKER);
    }

    public TemplateConfig(TemplateEngineType templateEngineType) {
        if (templateEngineType == null) {
            throw new IllegalArgumentException("模板引擎类型必填");
        }
        this.setTemplateEngineType(templateEngineType);
    }

    public void setTemplateEngineType(TemplateEngineType templateEngineType) {
        this.templateEngineType = templateEngineType;

        GeneratorFactory.initTemplatePath(GenerateTypeConstants.ENTITY, TemplatePathConstants.getDefaultTemplatePath(templateEngineType, GenerateTypeConstants.ENTITY));
        GeneratorFactory.initTemplatePath(GenerateTypeConstants.MAPPER, TemplatePathConstants.getDefaultTemplatePath(templateEngineType, GenerateTypeConstants.MAPPER));
        GeneratorFactory.initTemplatePath(GenerateTypeConstants.REPOSITORY, TemplatePathConstants.getDefaultTemplatePath(templateEngineType, GenerateTypeConstants.REPOSITORY));
        GeneratorFactory.initTemplatePath(GenerateTypeConstants.REPOSITORY_IMPL, TemplatePathConstants.getDefaultTemplatePath(templateEngineType, GenerateTypeConstants.REPOSITORY_IMPL));
        GeneratorFactory.initTemplatePath(GenerateTypeConstants.SERVICE, TemplatePathConstants.getDefaultTemplatePath(templateEngineType, GenerateTypeConstants.SERVICE));
        GeneratorFactory.initTemplatePath(GenerateTypeConstants.SERVICE_IMPL, TemplatePathConstants.getDefaultTemplatePath(templateEngineType, GenerateTypeConstants.SERVICE_IMPL));
        GeneratorFactory.initTemplatePath(GenerateTypeConstants.CONTROLLER, TemplatePathConstants.getDefaultTemplatePath(templateEngineType, GenerateTypeConstants.CONTROLLER));
    }

    public TemplateEngine getTemplateEngine() {
        return TemplateEngineFactory.getTemplateEngine(templateEngineType);
    }

}
